package com.example.warehouse.service;

import com.example.warehouse.entity.Inventory;
import com.example.warehouse.entity.InventoryLog;
import com.example.warehouse.entity.Product;
import com.example.warehouse.enums.OperationType;
import com.example.warehouse.mapper.InventoryLogMapper;
import com.example.warehouse.mapper.InventoryMapper;
import com.example.warehouse.mapper.ProductMapper;
import jdk.swing.interop.SwingInterOpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service

public class ProductService {
    @Autowired
    private ProductMapper productMapper;

    @Autowired
    private InventoryMapper inventoryMapper;

    @Autowired
    private InventoryLogMapper inventoryLogMapper;

    // 获取所有商品
    public List<Product> getAllProducts() {
        return productMapper.getAllProducts();
    }

    // 根据ID获取商品
    public Product getProductById(Long id) {
        return productMapper.findById(id);
    }

    // 根据名称获取商品
    public Product getProductByName(String name) {
        return productMapper.findByName(name);
    }

    // 添加商品
    public void addProduct(Product product) {
        // 检查商品是否已经存在
        Product existingProduct = productMapper.findById(product.getId());
        if (existingProduct != null) {
            throw new RuntimeException("商品已经存在，无法重复添加");
        }

        // 插入商品到 product 表（没有传递 id，数据库会自动生成）
        productMapper.insertProduct(product);

        // 打印插入后的商品ID
        System.out.println("插入后的商品ID：" + product.getId());

        // 确保商品 ID 被正确赋值
        if (product.getId() == null) {
            throw new RuntimeException("商品ID为空，插入失败");
        }

        // 查询商品是否已有库存记录
        Integer currentQuantity = inventoryMapper.getInventoryByProductId(product.getId());

        // 如果没有库存记录，初始化库存为 20
        if (currentQuantity == null) {
            Inventory inventory = new Inventory(product.getId(), 20); // 默认库存为 20
            inventoryMapper.insertInventory(inventory); // 插入库存记录

            // 记录库存变动日志（库存入库）


            InventoryLog inventoryLog = new InventoryLog();
            inventoryLog.setProductId(product.getId());
            inventoryLog.setOperator("admin"); // 操作员
            inventoryLog.setQuantity(20); // 增加的库存数量
            inventoryLog.setOperationType(OperationType.STOCK_IN); // 变动类型：库存入库
            inventoryLog.setOperatedAt(LocalDateTime.now()); // 当前时间作为操作时间
            inventoryLogMapper.insertInventoryLog(inventoryLog); // 插入库存变动记录
        }
    }


    // 更新商品
    public void updateProduct(Product product) {
        productMapper.updateProduct(product);
    }

    // 删除商品
    public void deleteProduct(Long id) {
        // 1. 删除商品基本信息
        productMapper.deleteProduct(id);
        // 2. 删除商品的库存记录
        inventoryMapper.deleteInventoryByProductId(id);

        // 3. 删除商品的库存变动日志或记录库存变动
        InventoryLog inventoryLog = new InventoryLog();
        inventoryLog.setProductId(id);
        inventoryLog.setOperationType(OperationType.STOCK_OUT); // 变动类型：库存入库
        inventoryLog.setOperator("admin"); // 操作员
        inventoryLog.setQuantity(0); // 可以设置为 0 或者其他操作
        inventoryLog.setOperatedAt(LocalDateTime.now()); // 当前时间作为操作时间
        inventoryLogMapper.insertInventoryLog(inventoryLog);
    }
}
